package com.cn.mycodc;

import com.cn.constant.ConstantValue;
import com.cn.model.Request;
import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.MessageToByteEncoder;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;

/**
 * 请求编码器：客户端将请求中的数据编码
 * <pre>
 * 数据包格式
 * +——----——+——-----——+——----——+——----——+——-----——+
 * | 包头          | 模块号        | 命令号      |  长度        |   数据       |
 * +——----——+——-----——+——----——+——----——+——-----——+
 * </pre>
 * 包头4字节
 * 模块号2字节short
 * 命令号2字节short
 * 长度4字节(描述数据部分字节长度)
 * 
 * @author -琴兽-
 *
 */
public class MyRequestEncoder extends MessageToByteEncoder{

	@Override
	protected void encode(io.netty.channel.ChannelHandlerContext channelHandlerContext, Object o, ByteBuf out) throws Exception {
		Request request = (Request)(o);

		//包头
		out.writeInt(ConstantValue.FLAG);
		//module
		out.writeShort(request.getModule());
		//cmd，命令号
		out.writeShort(request.getCmd());
		//长度
		out.writeInt(request.getDataLength());
		//data
		if(request.getData() != null){
			out.writeBytes(request.getData());
		}
	}
}
